古いclient jsで動いているwindowを自動リロードする
たしか2017年ごろから、半年間ほどscrapboxで使ってたshokai.icon
実装
クライアントは、サーバーとバージョン情報がずれていたらwindow.reload()を実行する
新しいコードをサーバーにデプロイすると、WebSocketが古いサーバーから切断され、新しいサーバーに再接続される事を利用している
ダメだった
デプロイ直後のサーバー負荷が高くなる
アクティブなwebsocket接続を持つ全てのブラウザが、ほぼ同時にリロードしてしまう
ランダムに2〜3分のディレイを入れる工夫をしたが
それでもそれなりに負荷がハネ上がる
よくわからんタイミングで勝手にリロードされるのは邪魔
ページを書いてる途中でリロードされたり
SPAを構築するassets(HTML/JavaScript/CSS/画像)の更新が、バックグラウンドで非同期に行われるようになった
コードをデプロイ→WebSocket切断→再接続、でサーバー・クライアント間のバージョンのズレを検知しても
そのタイミングではassets cacheのダウンロードが完了しておらず、window.reload()しても古いassetsで画面が構築されてしまう
比較するものがおかしい
この2つを比較しているわけだけど
今の画面表示に使われているassetsのバージョン
サーバーのバージョン
再実装するとしたら、この2つを比較するようにしないとなあ
今の画面表示に使われているassetsのバージョン
タイミングもおかしい
WebSocket切断→再接続はトリガーとして適切ではない
そもそもページを書いてる途中でリロードされたり、ダメな所も目立つし
一体どのタイミングでバージョンチェックとリロードをすればいいんだ?
と考えていた
たくさんタブを開いて埋もれてる古いscrapboxのwindowほど、websocketが切断されているのでなかなか自動リロードもされない
最終的に自動リロードではない方法で問題を解決した